package org.boticelli.auth;

import org.acegisecurity.AccessDeniedException;
import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.log4j.Logger;

/**
 * Erlaubt einfachen Zugriff auf die acegi {@link UserDetails} des aktuellen Benutzers.
 * @author shelmberger
 *
 */
public class AuthHelper
{
    private static Logger log = Logger.getLogger(AuthHelper.class);

    /**
     * Nicht instanziierbar
     */
    private AuthHelper()
    {
    }

    /**
     * Gibt die UserDetails des aktuell authentifizierten Benutzer zur�ck.
     * @return UserDetails des Benutzers
     * @throws AccessDeniedException Falls kein Benutzer authentifiziert ist
     */
    public static UserDetails getCurrentUser() throws AccessDeniedException
    {
        UserDetails user=checkCurrentUser();
        if (user == null)
        {
            throw new AccessDeniedException("Kein Benutzer eingeloggt.");
        }
        return user;
    }
    
    /**
     * Gibt die UserDetails des aktuell authentifizierten Benutzer oder 
     * <code>null</code>, falls kein Benuzter authentifiziert ist, zur�ck.
     * @return UserDetails oder <code>null</code> 
     */
    public static UserDetails checkCurrentUser()
    {
        Authentication authentication = (Authentication) SecurityContextHolder
                .getContext().getAuthentication();

        UserDetails user = null;
        if (authentication != null)
        {
            Object principal= authentication.getPrincipal();
            if (principal instanceof UserDetails)
            {
                user = (UserDetails)principal;
            }
        }
        
        if (user == null)
            log.warn("Kein aktueller Benutzer");
        return user;
    }
}
